import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

// 真正定义Vue的构造函数
// Vue就是一个用 Function 实现的类，我们只能通过 new Vue 去实例化它
function Vue (options) {
  console.log('===== vue/src/core/instance/index.js 真正的Vue初始化 =====')
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)
  ) {
    // 提示需要 new 实例化
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  // src/core/instance/init.js 挂在到Vue原型
  // 这里调用 init 方法
  this._init(options)
}
// 扩展vue的原型方法
// 添加init方法
initMixin(Vue)
// 添加$props $data $watch $set $del属性
stateMixin(Vue)
// $on $once $emit $off
eventsMixin(Vue)
// _update $forceUpdate $destroy
lifecycleMixin(Vue)
// $nextTick _render
renderMixin(Vue)

export default Vue
